﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace MMessaging.MessagingEx.Common
{
	/// <summary>
	/// Repräsentiert die Ausgangsseite einer Messagequeue.
	/// </summary>
	/// <typeparam name="MESSAGETYPE"></typeparam>
	public interface IMChannelEndOut<MESSAGETYPE>
		where MESSAGETYPE : class
	{
		/// <summary>
		/// Blockiert bis eine Message bereit steht oder der übergebene Timeout ausläuft.
		/// </summary>
		/// <param name="timeout"></param>
		/// <returns>
		/// null, wenn der Timeout ausgelaufen ist.
		/// </returns>
		MESSAGETYPE WaitForMessage(int timeout);

		/// <summary>
		/// Eines der Signale wird gesetzt, wenn eine Message bereit steht.
		/// </summary>
		WaitHandle[] WaitSignals { get; }
		string Name { get; }
	}
}
